package com.qinhong.config;

import com.google.common.base.Predicates;
import com.qinhong.anno.MyAnnotationSwagger;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import static com.google.common.base.Predicates.not;
import springfox.documentation.builders.RequestHandlerSelectors;

@Configuration
public class SwaggerConfiguration {

    // 创建docket对象 并交给spring管理 是swagger全局配置文件
    public Docket docket(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2);

        ApiInfo apiInfo = new ApiInfoBuilder()
                .contact(new Contact("swagger开发文档","http://www.qinghon.com","qinhong@qq.com"))
                .title("标题")
                .description("Swagger框架学习帮助文档详细")
                .version("1.1")
                .build();
        docket.apiInfo(apiInfo);

        docket = docket.select() //获取选择器 返回ApiSelectorBuilder 构造选择器的
                .apis(Predicates.not(
                        RequestHandlerSelectors.withMethodAnnotation( // 当方法上有注解的时候返回
                                MyAnnotationSwagger.class)))
                .apis(RequestHandlerSelectors.basePackage("com.qinhong.controller")) //设定扫描哪个包中的注解
                .paths(
                        Predicates.or(
                                PathSelectors.regex("/swagger/.*"),//使用正则表达式 约束生成api文档的路径地址
                                PathSelectors.regex("/swagger2/.*"),//使用正则表达式 约束生成api文档的路径地址
                                PathSelectors.regex("/.*") //使用正则表达式 约束生成api文档的路径地址
                        )
                )
        .build();
    return docket;
    }
}
